package com.quartet.modules.vehicle.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.quartet.api.PageResult;
import com.quartet.api.PageResultMap;
import com.quartet.modules.home.dto.TTerminalCurrentPositionResponseDto;
import com.quartet.modules.home.dto.TerminalOnLineStatusResponseDto;
import com.quartet.modules.platform.dto.*;
import com.quartet.modules.statistics.dto.ServiceStatisticsRequestDto;
import com.quartet.modules.statistics.dto.ServiceStatisticsResponseDto;
import com.quartet.modules.vehicle.dto.*;
import com.quartet.modules.vehicle.entity.TTerminalPositionInfo;

import java.util.List;
import java.util.Map;

/**
 * 车辆位置表(TVehiclePositionInfo)表服务接口
 *
 * @author makejava
 * @since 2021-05-09 12:32:15
 */
public interface TTerminalPositionInfoService extends IService<TTerminalPositionInfo> {

    /**
     *  获取终端位置信息信息
     * @param tTerminalPositionInfoRequestDto
     * @return
     */
    PageResult<TTerminalPositionInfoResponseDto> selectTerminalPositionPage(TTerminalPositionInfoRequestDto tTerminalPositionInfoRequestDto);

    /**
     * 查询终端轨迹信息
     * @param tTerminalPositionInfoTrajectoryRequestDto
     * @return
     */
    PageResultMap<TTerminalPositionInfoResponseDto> selectTerminalPositionTrajectoryPage(TTerminalPositionInfoTrajectoryRequestDto tTerminalPositionInfoTrajectoryRequestDto);

    /**
     * 查询终端位置轨迹坐标信息
     * @param tTerminalPositionInfoTrajectoryRequestDto
     * @return
     */
    Map<String, List<TTerminalPositionTrajectoryCoordinateResponseDto>> selectTerminalPositionTrajectoryCoordinate(TTerminalPositionInfoTrajectoryRequestDto tTerminalPositionInfoTrajectoryRequestDto);

    /**
     * 查询当前终端的里程集合
     * @param terminalCodeList
     * @return
     */
    float queryTotalMileage(List<String> terminalCodeList);

    /**
     * 获取一直的总里程数和运行时长
     * @param terminalCodeList
     * @return
     */
    TVehicleFunctionDto queryTerminalTimeAndMileage(List<String> terminalCodeList);

    /**
     * 功能描述: 过去一周车辆状态总时间
     * @author huipanxing huipanxing@chinasofti.com
     * @date 2021/6/24 11:09
     * @param terminalCodeList
     * @return java.util.List<com.quartet.modules.platform.dto.TVehicleStatusTotalTimeDto>
     */
    TVehicleStatusTotalTimeDto queryVehicleStatusTotalTime(List<String> terminalCodeList);

    /**
     * 区域查终端
     * @param tTerminalPositionInfoRegionLookupRequestDto
     * @return
     */
    List<TTerminalPositionInfoResponseDto> selectTerminalPositionWithRegion(TTerminalPositionInfoRegionLookupRequestDto tTerminalPositionInfoRegionLookupRequestDto);

    /**
     * 历史区域查终端
     * @param tTerminalPositionInfoRegionLookupRequestDto
     * @return
     */
    List<TTerminalPositionInfoResponseDto> selectTerminalPositionWithHistoryRegion(TTerminalPositionInfoRegionLookupRequestDto tTerminalPositionInfoRegionLookupRequestDto);

    /**
     * 功能描述: 查询设备不同状态的个数
     * @author huipanxing huipanxing@chinasofti.com
     * @date 2021/6/29 9:49
     * @param
     * @return java.util.List<com.quartet.modules.platform.dto.TTerminalStatusNumber>
     */
    List<TTerminalStatusNumber> queryTerminalStatusNum(List<String> tTerminalCodeList);

    /**
     * 功能描述: 获取车辆行驶里程的top10
     * @author huipanxing huipanxing@chinasofti.com
     * @date 2021/7/5 11:00
     * @param tTerminalInfoList
     * @return java.util.List<com.quartet.modules.platform.dto.TTerminalPositionDto>
     */
    List<TTerminalPositionDto> queryTerminalMileageTop(List<String> tTerminalInfoList);

    /**
     * 功能描述: 车辆在线率
     * @author huipanxing huipanxing@chinasofti.com
     * @date 2021/7/5 11:12
     * @param
     * @param tTerminalInfoList
     * @return java.lang.String
     */
    TerminalOnLineStatusResponseDto queryTerminalOnLineRate(List<String> tTerminalInfoList);

    /**
     * 功能描述: 最近一周新增位置信息数据
     * @author huipanxing huipanxing@chinasofti.com
     * @date 2021/7/5 14:48
     * @param
     * @return java.util.Map<java.lang.String,java.lang.Integer>
     */
    Map<String, Double> queryTerminalPositionLastWeek();

    /**
     * 功能描述: 最近一周新增报警信息数据
     * @author huipanxing huipanxing@chinasofti.com
     * @date 2021/7/5 15:07
     * @param
     * @return java.util.Map<java.time.LocalDateTime,java.lang.Double>
     */
    Map<String, Double> queryTerminalAlarmLastWeek();

    /**
     *  最近一周的报警总数
     * @return
     */
    List<TPlatformAlarmTotalDto> getAlarmTotalCountLastWeek();

    /**
     *  查询终端实时位置
     * @param tTerminalCodeList
     * @return
     */
    List<TTerminalCurrentPositionResponseDto> queryTerminalCurrentPosition(List<String> tTerminalCodeList);
}
